# 进程是竞争计算机资源的基本单位，理论上单核cpu只能执行一个应用程序，但是cpu运行很快，
# 可以在不同的应用程序（pycharm lol qq）之间切换（这称为进程调度），
# 让人无法察觉，进程调度由算法来实现，进程之间切换是非常消耗cpu的,进程切换太过笨重


# 线程
'''
线程 是进程的一部分可以有一个也可以有多个线程
进程粒度太大，线程很小，所以线程的切换消耗的cpu远远小于进程切换的消耗
'''

'''
进程 分配资源 内存资源
线程 利用cpu执行代码
'''

'''
代码 转化为指令 由cpu来执行指令  执行时消耗计算机资源
线程不拥有资源只能访问资源
但是线程属于进程，可以访问进程资源
'''

# 多线程
import time
import threading


def worker():
    print('i am thread')
    t = threading.current_thread()
    time.sleep(5)
    print(t.getName())


# 直接使用函数的化就只有一个线程，不能同时执行，有先后顺序
worker()

t = threading.current_thread()
print(t.getName())

# 新开一个线程，和主线程没有先后运行的限制，可以同时执行
new_t = threading.Thread(target=worker, name='test_thread')
new_t.start()


#多线程的好处
'''
更加充分的利用cpu的性能优势
异步编程
多核cpu 并行的执行程序
python不能充分利用多核cpu优势
GIL 全局解释器锁
锁：主要为了线程安全
内存资源 一个进程 多个线程 共享资源
IO密集型程序：查询数据库、请求网络资源、读写文件 这些都有很多的等待时间，使用python多线程能够节省时间
CPU密集型
'''